EC2(Go)からElastiCache for Redisにセッション情報を作成/登録してみた
こんにちは、ゲームソリューショングループのsoraです。
今回は、EC2(Go)からElastiCache for Redisにセッション情報を作成/登録してみたことを書いていきます。
構成図を書くほどでもないですが以下です。
AWSサービスの作成(Terraform)
セッション情報を作成して登録するEC2サーバ・それに紐づくNW関連は既存のものを使用します。(以下のブログで作成したものです。)
EC2はGoの実行環境も準備できているものとします。
ElastiCache for Redis周りをTerraformを使って作成します。
クラスタモードは無効化、認証はなしとします。
terraform { #AWSプロバイダーのバージョン指定 required_providers { aws = { source = "hashicorp/aws" version = "~> 4.51.0" } } } # AWSプロバイダーの定義 provider aws { region = "ap-northeast-1" } # 既存のVPC variable vpc_id { type = string # 使用するVPCのID default = "<VPC ID>" } # サブネットの作成 resource aws_subnet redis_subnet { vpc_id = var.vpc_id # Redisを配置するプライベートサブネットのCIDRブロック cidr_block = "<Redis Private Subnet CIDR block>" } # セキュリティグループの作成 resource aws_security_group redis_sg { name_prefix = "redis-sg" ingress { from_port = 6379 to_port = 6379 protocol = "tcp" # EC2を配置しているパブリックサブネットのCIDRブロック cidr_blocks = ["<EC2 CIDR block>"] } } # Redisの作成 resource aws_elasticache_subnet_group redis_subnet_group { name = "redis-subnet-group" subnet_ids = [aws_subnet.redis_subnet.id] } resource aws_elasticache_cluster redis_cluster { cluster_id = "redis-cluster" engine = "redis" engine_version = "7.0" node_type = "cache.t4g.micro" num_cache_nodes = 1 subnet_group_name = aws_elasticache_subnet_group.redis_subnet_group.name security_group_ids = [aws_security_group.redis_sg.id] }
作成したTerraformのコードを実行して構築します。
$ terraform init $ terraform apply
ElastiCache for Redisが作成できています。
画像2枚目にあるエンドポイントは、接続時に使用します。
セッション情報の作成・登録
redis-cliのインストール
セッション情報を確認する際にEC2からElastiCache for Redisを操作するため、EC2にredis-cliをインストールします。
こちらのブログを参考に実行します。
# パッケージインストール $ sudo yum -y install openssl-devel gcc # redisのソースコード取得・解凍 $ wget http://download.redis.io/redis-stable.tar.gz $ tar xvzf redis-stable.tar.gz # コンパイル $ cd redis-stable $ make redis-cli BUILD_TLS=yes # パスを通す $ sudo install -m 755 src/redis-cli /usr/local/bin/
セッション情報の確認(空であること)
redis-cliでElastiCache for Redisに登録されているセッション情報を確認します。
「redis-cluster.xxxxxx.xxxx.apne1.cache.amazonaws.com」の部分は、作成したElastiCache for Redisのエンドポイントを入れてください。
$ redis-cli -h redis-cluster.xxxxxx.xxxx.apne1.cache.amazonaws.com redis-cluster.xxxxxx.xxxx.apne1.cache.amazonaws.com:6379> keys * (empty array)
セッション情報をまだ登録していないため、空になっています。
セッション情報の作成/登録(Go)
EC2でセッション情報を作成して、ElastiCache for Redisに登録します。
セッションIDは、英数字16桁でランダムな値を生成しています。
package main import ( "context" "fmt" "math/rand" "time" "github.com/go-redis/redis/v8" ) var redisClient *redis.Client func main() { // Redisクライアントの初期化 redisClient = redis.NewClient(&redis.Options{ // Redisサーバーのエンドポイント Addr:"<Redis Endpoint>", // Redisサーバーのパスワード(今回は認証なし) Password:"", // Redisデータベースの選択 DB:0, }) // セッション情報の作成 sessionID := generateSessionID() sessionData := "sample data" // Redisにセッション情報を保存する if err := redisClient.Set(context.Background(), sessionID, sessionData, 0).Err(); err != nil { panic(err) } fmt.Printf("Session created successfully: %s\n", sessionID) } // セッションIDをランダムに生成する関数 func generateSessionID() string { rand.Seed(time.Now().UnixNano()) const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" const length = 16 b := make([]byte, length) for i := range b { b[i] = charset[rand.Intn(len(charset))] } return string(b) }
作成したGoのコードをビルドして実行します。
$ go mod init redis-session.go $ GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o redis-session $ ./redis-session Session created successfully: l5jwwktknF7mgQFt
正常に作成/登録できたみたいなので、ElastiCache for Redis側で確認します。
セッション情報の確認(登録されたセッション情報が存在すること)
redis-cliでElastiCache for Redisに登録されているセッション情報を確認します。
$ redis-cli -h redis-cluster.xxxxxx.xxxx.apne1.cache.amazonaws.com redis-cluster.xxxxxx.xxxx.apne1.cache.amazonaws.com:6379> keys * 1) "l5jwwktknF7mgQFt"
先ほどは空でしたが、登録したセッションIDが確認できました。
最後に削除もしてみます。
redis-cluster.xxxxxx.xxxx.apne1.cache.amazonaws.com:6379> del l5jwwktknF7mgQFt (integer) 1 redis-cluster.xxxxxx.xxxx.apne1.cache.amazonaws.com:6379> keys * (empty array)
登録したセッションIDが削除されて、空になっていることが確認できました。
最後に
今回は、EC2(Go)からElastiCache for Redisにセッション情報を作成/登録してみたことを記事にしました。
どなたかの参考になると幸いです。